// std-io.js - 标准输入输出交互脚本

const readline = require('readline');

/**
 * 创建readline接口用于读取用户输入
 */
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

/**
 * 问题数组 - 定义要收集的信息字段
 */
const questions = [
    { key: 'name', prompt: '请输入您的姓名: ' },
    { key: 'email', prompt: '请输入您的邮箱: ' },
    { key: 'qq', prompt: '请输入您的QQ号: ' },
    { key: 'phone', prompt: '请输入您的手机号码: ' }
];

/**
 * 验证邮箱格式
 */
function validateEmail(email) {
    const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
    return emailRegex.test(email);
}

/**
 * 验证手机号码格式（中国大陆）
 */
function validatePhone(phone) {
    const phoneRegex = /^1[3-9]\d{9}$/;
    return phoneRegex.test(phone.trim());
}

/**
 * 验证QQ号格式
 */
function validateQQ(qq) {
    const qqRegex = /^[1-9]\d{4,11}$/; // QQ号从1开始，5-12位数字
    return qqRegex.test(qq.trim());
}

/**
 * 显示问题并获取用户输入
 * @param {Array} questions - 问题数组
 * @param {Object} userData - 用户数据对象
 * @param {Number} index - 当前问题索引
 */
function askQuestion(questions, userData, index = 0) {
    // 如果所有问题都问完了，显示结果
    if (index >= questions.length) {
        console.log('\n' + '='.repeat(50));
        console.log('✅ 用户信息收集完成！');
        console.log('='.repeat(50));
        
        // 格式化输出用户信息
        console.log('👤 姓名:', userData.name);
        console.log('📧 邮箱:', userData.email);
        console.log('💬 QQ号:', userData.qq);
        console.log('📱 手机号码:', userData.phone);
        
        console.log('\n📝 完整用户对象:');
        console.log(JSON.stringify(userData, null, 2));
        
        // 关闭readline接口
        rl.close();
        return;
    }
    
    const currentQuestion = questions[index];
    
    // 特殊处理：邮箱验证
    if (currentQuestion.key === 'email') {
        rl.question(currentQuestion.prompt, (answer) => {
            const email = answer.trim();
            if (!email) {
                console.log('⚠️  邮箱不能为空，请重新输入！');
                askQuestion(questions, userData, index); // 重新提问
                return;
            }
            
            if (!validateEmail(email)) {
                console.log('⚠️  邮箱格式不正确，请输入正确的邮箱地址！');
                askQuestion(questions, userData, index); // 重新提问
                return;
            }
            
            userData[currentQuestion.key] = email;
            askQuestion(questions, userData, index + 1);
        });
    }
    // 特殊处理：手机号码验证
    else if (currentQuestion.key === 'phone') {
        rl.question(currentQuestion.prompt, (answer) => {
            const phone = answer.trim();
            if (!phone) {
                console.log('⚠️  手机号码不能为空，请重新输入！');
                askQuestion(questions, userData, index);
                return;
            }
            
            if (!validatePhone(phone)) {
                console.log('⚠️  手机号码格式不正确，请输入11位中国大陆手机号！');
                askQuestion(questions, userData, index);
                return;
            }
            
            userData[currentQuestion.key] = phone;
            askQuestion(questions, userData, index + 1);
        });
    }
    // 特殊处理：QQ号验证
    else if (currentQuestion.key === 'qq') {
        rl.question(currentQuestion.prompt, (answer) => {
            const qq = answer.trim();
            if (!qq) {
                console.log('⚠️  QQ号不能为空，请重新输入！');
                askQuestion(questions, userData, index);
                return;
            }
            
            if (!validateQQ(qq)) {
                console.log('⚠️  QQ号格式不正确，请输入5-12位数字，且不能以0开头！');
                askQuestion(questions, userData, index);
                return;
            }
            
            userData[currentQuestion.key] = qq;
            askQuestion(questions, userData, index + 1);
        });
    }
    // 普通处理：姓名
    else {
        rl.question(currentQuestion.prompt, (answer) => {
            const name = answer.trim();
            if (!name) {
                console.log('⚠️  姓名不能为空，请重新输入！');
                askQuestion(questions, userData, index);
                return;
            }
            
            userData[currentQuestion.key] = name;
            askQuestion(questions, userData, index + 1);
        });
    }
}

/**
 * 主程序入口
 */
function main() {
    console.log('📋 用户信息收集系统');
    console.log('='.repeat(50));
    console.log('请按提示输入您的个人信息：\n');
    
    // 初始化用户数据对象
    const userData = {};
    
    // 开始提问
    askQuestion(questions, userData);
    
    // 处理用户中断输入 (Ctrl+C)
    rl.on('SIGINT', () => {
        console.log('\n\n👋 程序已退出，未完成信息收集。');
        process.exit(0);
    });
}

// 启动程序
main();